package com.zyf.wjy.service;

import com.zyf.wjy.dao.ProductDao;
import com.zyf.wjy.entity.Product;
import com.zyf.wjy.util.CodeGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 农产品服务类
 */
@Service
public class ProductService {
    
    @Autowired
    private ProductDao productDao;
    
    /**
     * 查询所有产品
     */
    public List<Product> findAll() {
        return productDao.findAll();
    }
    
    /**
     * 根据ID查询
     */
    public Product findById(Long id) {
        return productDao.findById(id);
    }
    
    /**
     * 根据产品编号查询
     */
    public Product findByProductCode(String productCode) {
        return productDao.findByProductCode(productCode);
    }
    
    /**
     * 根据作物ID查询
     */
    public List<Product> findByCropId(Long cropId) {
        return productDao.findByCropId(cropId);
    }
    
    /**
     * 批量保存产品
     */
    public List<Product> saveAll(List<Product> products) {
        return products.stream()
            .map(this::save)
            .toList();
    }
    
    /**
     * 保存产品
     */
    public Product save(Product product) {
        if (product.getId() == null) {
            product.setProductCode(CodeGenerator.generateProductCode());
            product.setCreateTime(LocalDateTime.now());
        }
        return productDao.save(product);
    }
    
    /**
     * 删除产品
     */
    public boolean deleteById(Long id) {
        return productDao.deleteById(id);
    }
    
    /**
     * 更新库存（入库）
     */
    public void stockIn(Long productId, Double quantity) {
        Product product = productDao.findById(productId);
        if (product != null) {
            product.setQuantity(product.getQuantity() + quantity);
            productDao.save(product);
        }
    }
    
    /**
     * 更新库存（出库）
     */
    public boolean stockOut(Long productId, Double quantity) {
        Product product = productDao.findById(productId);
        if (product != null) {
            if (product.getQuantity() >= quantity) {
                product.setQuantity(product.getQuantity() - quantity);
                productDao.save(product);
                return true;
            }
        }
        return false;
    }
}

